package D240604.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class ReflectTest {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        //第一种方式获取Class对象
        /*Student stu1 = new Student();//这一new 产生一个Student对象，一个Class对象。
        Class<? extends Student> stuClass = stu1.getClass();//获取Class对象
        System.out.println(stuClass.getName());*/

        //第二种方式获取Class对象
        /*Class stuClass2 = Student.class;
        System.out.println(stuClass == stuClass2);*/ //判断第一种方式获取的Class对象和第二种方式获取的是否是同一个

        //第三种方式获取Class对象
        Class<?> stuClass3 = null;
        try {
            stuClass3 = Class.forName("D240604.reflect.Student");//注意此字符串必须是真实路径，就是带包名的类路径，包名.类名
            Constructor constructor = stuClass3.getConstructor(String.class);
            Object obj = constructor.newInstance("小明");
            System.out.println(obj);
            //System.out.println(stuClass3 == stuClass);//判断三种方式是否获取的是同一个Class对象
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException | InvocationTargetException e) {
            throw new RuntimeException(e);
        }
    }
}

